package com.mvc.web.common.utils;

import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

import com.mvc.web.common.annotation.NumberRange;
import com.mvc.web.common.annotation.StringValidate;

/** 
 * @ClassName: ValidatorUtil 
 * @Description: 校验工具类
 * @author: 白海安(baiha@jizhicar.com) 2017年9月1日 下午3:11:36
 * @version V1.0
 */
public class ValidatorUtil {
	/** 
	 * @Description: 空值验证 
	 * @author 白海安(baiha@jizhicar.com) 2017年8月31日 下午6:28:41
	 * @version V1.0
	 */
	public Map<String, Object> isCanEmpty(Object value, Field field) {
		Map<String, Object> validateResult = new HashMap<String, Object>();
		StringValidate annotation = field.getAnnotation(StringValidate.class);
		if(annotation.isCanEmpty()){
			validateResult.put("message", "验证通过");
			validateResult.put("result", true);
		}else if (value == null || value.equals("")) {
			validateResult.put("message",annotation.message());
			validateResult.put("result", false);
		} else {
			validateResult.put("message", "验证通过");
			validateResult.put("result", true);
		}
		return validateResult;
	}
	/** 
	 * @Description: 手机号验证 
	 * @author 白海安(baiha@jizhicar.com) 2017年8月31日 下午6:28:41
	 * @version V1.0
	 */
	public Map<String, Object> isPhone(Object value, Field field) {
		Map<String, Object> validateResult = new HashMap<String, Object>();
		StringValidate annotation = field.getAnnotation(StringValidate.class);
		if(annotation.isPhone()==false||value == null || value.equals("")){
			validateResult.put("message", "验证通过");
			validateResult.put("result", true);
		}else if (ToolsUtils.ValidatePhone(value.toString())==false) {
			validateResult.put("message",annotation.message());
			validateResult.put("result", false);
		}else{
			validateResult.put("message", "验证通过");
			validateResult.put("result", true);
		}
		return validateResult;
	}
	/** 
	 * @Description: 整数范围验证
	 * @author 白海安(baiha@jizhicar.com) 2017年8月31日 下午6:28:59
	 * @version V1.0
	 */
	public Map<String, Object> min(Object value, Field field) {
		Map<String, Object> validateResult = new HashMap<String, Object>();
		boolean b = true;
		NumberRange annotation = field.getAnnotation(NumberRange.class);
		if (value != null) {
			if((field.getType().getName().equals("java.lang.Integer")||field.getType().getName().equals("java.lang.int"))
				&&(int)value < annotation.min()){
				b=false;
			}else if((field.getType().getName().equals("java.lang.Double")||field.getType().getName().equals("double"))
					&&(double)value < annotation.min()){
				b=false;
			}else if((field.getType().getName().equals("java.lang.Float")||field.getType().getName().equals("float"))
					&&(float)value < annotation.min()){
				b=false;
			}else if((field.getType().getName().equals("java.lang.Long")||field.getType().getName().equals("long"))
					&&(long)value < annotation.min()){
				b=false;
			}else if((field.getType().getName().equals("java.math.BigDecimal")||field.getType().getName().equals("bigDecimal"))
					&&((BigDecimal)value).compareTo(BigDecimal.valueOf(annotation.min()))==-1){
				b=false;
			}
			validateResult.put("message", annotation.message());
			validateResult.put("result", b);
		} else {
			validateResult.put("message", "验证通过");
			validateResult.put("result", b);
		}
		return validateResult;
	}
	/** 
	 * @Description: 整数范围验证
	 * @author 白海安(baiha@jizhicar.com) 2017年8月31日 下午6:28:59
	 * @version V1.0
	 */
	public Map<String, Object> max(Object value, Field field) {
		Map<String, Object> validateResult = new HashMap<String, Object>();
		boolean b = true;
		NumberRange annotation = field.getAnnotation(NumberRange.class);
		if (value != null) {
			if((field.getType().getName().equals("java.lang.Integer")||field.getType().getName().equals("java.lang.int"))
				&&(int)value > annotation.max()){
				b=false;
			}else if((field.getType().getName().equals("java.lang.Double")||field.getType().getName().equals("double"))
					&&(double)value > annotation.max()){
				b=false;
			}else if((field.getType().getName().equals("java.lang.Float")||field.getType().getName().equals("float"))
					&&(float)value > annotation.max()){
				b=false;
			}else if((field.getType().getName().equals("java.lang.Long")||field.getType().getName().equals("long"))
					&&(long)value > annotation.max()){
				b=false;
			}else if((field.getType().getName().equals("java.math.BigDecimal")||field.getType().getName().equals("bigDecimal"))
					&&((BigDecimal)value).compareTo(BigDecimal.valueOf(annotation.max()))==1){
				b=false;
			}
			validateResult.put("message", annotation.message());
			validateResult.put("result", b);
		} else {
			validateResult.put("message", "验证通过");
			validateResult.put("result", b);
		}
		return validateResult;
	}
	
	/** 
	 * @Description: 字符串最大长度验证 
	 * @author 白海安(baiha@jizhicar.com) 2017年8月31日 下午6:29:08
	 * @version V1.0
	 */
	public Map<String, Object> maxLength(Object value, Field field) {
		Map<String, Object> validateResult = new HashMap<String, Object>();
		StringValidate annotation = field.getAnnotation(StringValidate.class);
		if (value != null && value.toString().length() > annotation.maxLength()) {
			validateResult.put("message", annotation.message());
			validateResult.put("result", false);
		} else {
			validateResult.put("message", "验证通过");
			validateResult.put("result", true);
		}
		return validateResult;
	}
	
}
